package timeitj.ejb.persons;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.NoResultException;
import org.apache.log4j.Logger;
import timeitj.ejb.groups.GroupManager;
import timeitj.ejb.persistence.PersistenceManagerAbstract;
import timeitj.persistence.Group;
import timeitj.persistence.Person;

/**
 *
 * @author kunee
 */
@Stateless
public class PersonManagerBean extends PersistenceManagerAbstract<Person, Long>
    implements PersonManager {
    
    @EJB
    GroupManager groupManager;
    
    public PersonManagerBean(){
        log = Logger.getLogger(PersonManagerBean.class.getName());
        log.debug("PersonManagerBean instantiated");
    }
    
    public Person getPersonByLogin(String login) {
        
        Person person;
        
        try {
            person = (Person) em.createNamedQuery("PersonByLogin")
            .setParameter("login", login)
            .getSingleResult();
            
        } catch (NoResultException ex) {
            return null;
        }
        
        return person;
    }
    
//    public void create(Person person)
//                        throws RegistrationFailedException {
//
//        if (person.getLogin() == null || person.getLogin().equals("") ||
//            person.getPassword() == null || person.getPassword().equals("") ||
//            person.getFirstName() == null || person.getFirstName().equals("") ||
//            person.getLastName() == null || person.getLastName().equals("") ||
//            person.getEmail() == null || person.getEmail().equals("")
//        ) {
//            throw new RegistrationFailedException("Person Data incomplete");
//        }
//	/*
//	 * TODO: Nicht klar, ob das eine gute Idee ist. Aber wir muessen irgendwie
//	 * sicher stellen, dass die Gruppe 'USERS' immer vorhanden ist.
//         * Eigentlich muss es ein Setup-Skript geben, dass immer die nötigen geschichten
//         * aufsetzt.
//	 */
//        Group group = groupManager.getGroupByName("USERS");
//        if (group == null){
//            group= groupManager.createGroup("USERS");
//        }
//
//        person.addGroup(group);
//        store(person);
// }
    public Person create(Person person){
        Group group = groupManager.getGroupByName("USERS");
        if (group == null){
            group= groupManager.createGroup("USERS");
        }
        person.addGroup(group);
        person = super.create(person);
        log.info("New Person created: " + person.getLogin());
        return person;
    }
    
    public List<Person> getAllPersons() {
        return em.createQuery("select p from Person p").getResultList();
    }
}
